home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
tpmulti.zip
/
MTEST.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-01-04
|
3KB
|
108 lines
{$R-,S-,I-,D-,F-,V-,B-,N-,L- }
Program MTest;
{ Message-Passing Test
Christian Philipps
6/88
}
USES Dos, Crt, CpMulti;
VAR MessageBuffer : String;
SubNo : TaskNoType;
BeepNo : TaskNoType;
{-----------------------------------------------------------------------------}
PROCEDURE TaskMsgOut(txt : string);
{ Safe output of a string to the screen }
BEGIN {TaskMsgOut}
BindCPU;
Writeln(txt);
ReleaseCPU;
END; {TaskMsgOut}
{-----------------------------------------------------------------------------}
PROCEDURE Beep;
{ First Sub-Task }
BEGIN {Beep}
REPEAT
Sound(200);
Delay(5);
NoSound;
UNTIL Keypressed;
TaskMsgOut('Beep: Sending to SubTask...');
IF Send(SubNo,@MessageBuffer,Length(MessageBuffer)+1,Wait) <> Task_OK
THEN Writeln('Beep: Receive-Status not O.K.')
ELSE Writeln('Beep: Message received correctly!');
TaskMsgOut('Beep: End of the performance...');
Terminate;
END; {Beep}
{-----------------------------------------------------------------------------}
PROCEDURE SubTask;
{ Second Sub-Task }
VAR Message : String;
BEGIN {SubTask}
TaskMsgOut('SubTask: Ready! - Sleeping for 5 seconds!');
Sleep(Seconds(5));
TaskMsgOut('SubTask: Receive with wait...');
IF Receive(BeepNo,@Message,Wait) <> Task_OK
THEN TaskMsgOut('SubTask: Error during Receive!!')
ELSE TaskMsgOut('SubTask: Received: '+Message);
TaskMsgOut('SubTask: Get the message from MasterTask, if available');
IF Receive(AnyTask,@Message,NoWait) <> Task_OK
THEN TaskMsgOut('SubTask: Error during Receive!!')
ELSE TaskMsgOut('SubTask: Received: '+Message);
Writeln('SubTask: Message received from Task No. ',ReceivedFrom);
TaskMsgOut('SubTask: Terminating...');
Terminate;
END; {SubTask}
{-----------------------------------------------------------------------------}
BEGIN {Main}
ClrScr;
MessageBuffer := 'Message in a bottle...';
Writeln('MasterTask: Starting the BeepTask!');
BeepNo := CreateTask(@Beep,Pri_User,500);
IF BeepNo < 0
THEN Writeln('MasterTask: Error during creation of the BeepTask!');
Writeln('MasterTask: Starting the SubTask!');
SubNo := CreateTask(@SubTask,Pri_User,1000);
IF SubNo < 0
THEN BEGIN
Writeln('MasterTask: Task-Create failed!!');
Halt;
END;
Sleep(Seconds(1)); { Let it speak to us... }
Writeln('MasterTask: Waiting for the message to be received...');
IF Send(SubNo,@MessageBuffer,Length(MessageBuffer)+1,Wait) <> Task_OK
THEN Writeln('MasterTask: Receive-status not O.K.')
ELSE Writeln('MasterTask: Message received correctly!');
Writeln('MasterTask: Sleeping for 2 seconds...');
Sleep(Seconds(2));
Writeln('MasterTask: <RETURN> ends!');
Readln;
NoSound;
END. {Main}